package seqlist.queue.LeetCode;
//232. 用栈实现队列
//请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：

import java.util.Stack;

/**
 * 思路：栈只能尾删，要实现队列头删的效果，里面的元素就必须逆序排列
 * s1栈真正保存元素，s2栈做辅助。先s1栈元素循环弹出插入到s2直至为空
 * 然后正常插入x到s1，最后s2栈元素循环弹出插入到s1直至为空
 */
public class Num232_MyQueue {
    private Stack<Integer> s1 = new Stack<>();//最终保存元素的栈
    private Stack<Integer> s2 = new Stack<>();//用于辅助的栈

    public void push(int x) {
        //循环清空s1元素插入到s2形参逆序
        while(!s1.isEmpty()){
           s2.push(s1.pop());
        }
        s1.push(x);
        while(!s2.isEmpty()){
            s1.push(s2.pop());
        }
    }

    public int pop() {
        return s1.pop();
    }

    public int peek() {
        return s1.peek();
    }

    public boolean empty() {
        return s1.isEmpty();
    }
}
